package utils;

import java.nio.ByteBuffer;
import java.util.Locale;

public class ByteUtils {

	/**
	 * 函数名称：hexStr2Byte</br> 功能描述：String 转数组
	 *
	 */
	public static byte[] hexStr2Byte(String hex) {

		ByteBuffer bf = ByteBuffer.allocate(hex.length() / 2);
		for (int i = 0; i < hex.length(); i++) {
			String hexStr = hex.charAt(i) + "";
			i++;
			hexStr += hex.charAt(i);
			byte b = (byte) Integer.parseInt(hexStr, 16);
			bf.put(b);
		}
		return bf.array();
	}

	/**
	 * 函数名称：byteToHex</br> 功能描述：byte转16进制
	 */
	public static String byteToHex(byte b) {
		String hex = Integer.toHexString(b & 0xFF);
		if (hex.length() == 1) {
			hex = '0' + hex;

		}
		return hex.toUpperCase(Locale.getDefault());

	}


	/**
	 * 将字节数组转换成16进制字符串
	 * 
	 * @param array
	 *            需要转换的字符串
	 * @param toPrint
	 *            是否为了打印输出，如果为true则会每4自己添加一个空格
	 * @return 转换完成的字符串
	 */
	public static String byteArrayToHexString(byte[] array, boolean toPrint) {
		if (array == null) {
			return "null";
		}
		StringBuffer sb = new StringBuffer();

		for (int i = 0; i < array.length; i++) {
			sb.append(byteToHex(array[i]));
			if (toPrint && (i + 1) % 4 == 0) {
				sb.append(" ");
			}
		}
		return sb.toString();
	}

	/**
	 * 将字节数组转换成16进制字符串
	 * 
	 * @param array
	 *            需要转换的字符串(字节间没有分隔符)
	 * @return 转换完成的字符串
	 */
	public static String byteArrayToHexString(byte[] array) {
		return byteArrayToHexString(array, false);
	}

}
